/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._999;

/**
 *
 * 在一个 8 x 8 的棋盘上，有一个白色车（rook）。也可能有空方块，白色的象（bishop）和黑色的卒（pawn）。它们分别以字符 “R”，“.”，“B” 和 “p” 给出。大写字符表示白棋，小写字符表示黑棋。
 *
 * 车按国际象棋中的规则移动：它选择四个基本方向中的一个（北，东，西和南），然后朝那个方向移动，直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外，车不能与其他友方（白色）象进入同一个方格。
 *
 * 返回车能够在一次移动中捕获到的卒的数量。
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._999
 * @ClassName: AvailableCaptures
 * @Author: linyaonan
 * @Date: 2020/1/13 17:13
 */
public class AvailableCaptures {

    public int numRookCaptures(char[][] board) {
        // 找出R
        boolean isGet = false;
        int x = 0;
        int y = 0;
        for (int i = 0; i < board.length && !isGet; i++) {
            for (int j = 0; j < board[i].length && !isGet; j++) {
                if (board[i][j] == 'R') {
                    x = i;
                    y = j;
                    isGet = true;
                }
            }
        }
        int count = 0;
        // 向上
        for (int i = x - 1; i >= 0; i--) {
            if (board[i][y] == 'p') {
                count++;
                break;
            } else if (board[i][y] == 'B') {
                break;
            }
        }
        // 向下
        for (int i = x + 1; i < board.length; i++) {
            if (board[i][y] == 'p') {
                count++;
                break;
            } else if (board[i][y] == 'B') {
                break;
            }
        }
        // 向左
        for (int i = y - 1; i >= 0; i--) {
            if (board[x][i] == 'p') {
                count++;
                break;
            } else if (board[x][i] == 'B') {
                break;
            }
        }
        // 向右
        for (int i = y + 1; i < board[0].length; i++) {
            if (board[x][i] == 'p') {
                count++;
                break;
            } else if (board[x][i] == 'B') {
                break;
            }
        }
        return count;
    }
}
